package com.lcy.algorithm.huawei;

import java.util.*;

/**
 * 题目描述:某学校举行运动会，学生们按编号(1、2、 ...n)进行标识,现需要按照身高由低到高排列,对身高相同的人，按体重由轻到重排列;对于身高体重都相同的人，
 * 维持原有的编号顺序关系。请输出排列后的学生编号。
 * 输入描述:两个序列，每个序列由n个正整数组成(0< n<= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。
 * 输出描述:排列结果，每个数值都是原始序列中的学生编号,编号从1开始
 * 补充说明:
 * 示例
 * 输入:4
 * 100 100 120 130
 * 40 30 60 50
 * 输出:2 1 3 4
 * 说明:输出的第一个数字2表示此人原始编号为2 ,即身高为100 ,体重为30的这个人。由于他和编号为1的人身高-样,但体重更轻,因此要排在1前面。
 * 示例2
 * 输入:3
 * 90 110 90
 * 45 60 45
 * 输出: 1 3 2
 * 说明: 1和3的身高体重都相同，需要按照原有位置关系让1排在3前面,而不是3 1 2
 */
public class 按身高体重排队 {
    public static final String BLANK = " ";
    static class Student implements Comparable<Student> {
        int id;
        int height;
        int weight;

        public Student(int id, int height, int weight) {
            this.id = id;
            this.height = height;
            this.weight = weight;
        }

        @Override
        public int compareTo(Student other) {
            if (this.height != other.height) {
                // 身高不同,则按身高排序
                return Integer.compare(this.height, other.height);
            } else if (this.weight != other.weight) {
                // 身高相同，体重不同，按体重排序
                return Integer.compare(this.weight, other.weight); // 对身高相同的按照体重由轻到重排序
            } else {
                // 身高相同，体重相同，按序号
                return Integer.compare(this.id, other.id); // 身高体重都相同，保持原有编号顺序
            }
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.nextLine();
        int[] hightArry = Arrays.stream(scanner.nextLine().split(BLANK))
                .mapToInt(Integer::parseInt)
                .toArray();
        int[] weightArry = Arrays.stream(scanner.nextLine().split(BLANK))
                .mapToInt(Integer::parseInt)
                .toArray();


        List<Student> students = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            students.add(new Student(i+1, hightArry[i], weightArry[i]));
        }

        // 按照身高、体重和编号排序
        Collections.sort(students);

        // 输出排序后的学生编号
        for (Student student : students) {
            System.out.print(student.id + " ");
        }
    }
}
